Add non-null modifier for migrations, default script folder and generator, sessions generator and much more! | This Week in Rails
railtiesに関する変更です
bin/rails generate session というコマンドで基本的な認証の仕組みを生成できるようになりました
コマンドの実行により次のファイルが生成されます
code:sh
app/models/current.rb
app/models/user.rb
app/models/session.rb
app/controllers/sessions_controller.rb
app/views/sessions/new.html.erb
db/migrate/xxxxxxx_create_users.rb
db/migrate/xxxxxxx_create_sessions.rb
プルリクエストには「あくまで基本的な認証の仕組みを提供しているだけであって、認証におけるあらゆる関心事に対応することを意図したものではない」と明記されています
そのため、マジックリンク、Passkey、二要素認証などを期待しないように、と釘を刺しています This is not intended to be an all-singing, all-dancing answer to every possible authentication concern. It's merely intended to illuminate the basic path, and reveal that rolling your own authentication system is not some exotic adventure.
So do not expect magic links or passkeys or 2FA. That's not going to happen with this generator.
railtiesに関する変更です
bin/rails generate script file_name というコマンドでスクリプトファイルを生成できるようになりました
日々のアプリケーション運用において、一度限りのデータ移行用のスクリプトやデータ削除スクリプトをつくるシーンはよくありますが、これまでのRailsではそういったスクリプトを置く場所が明確ではありませんでした
この件について、DHHさんはそれらの置き場のデフォルトを "script" ディレクトリにすると明言していました
今回のプルリクエストではその意思決定を反映するカタチでコマンドが実装されています
使い方は次のとおりです
code:USAGE
Description:
Generate a one-off or general purpose script, such as a data migration
script, cleanup script, etc.
Example:
bin/rails generate script my_script
This will create:
script/my_script.rb
You can run the script using:
ruby script/my_script.rb
You can specify a folder:
bin/rails generate script cleanup/my_script
This will create:
script/cleanup/my_script.rb
railtiesに関する変更です
bin/rails generate migration ~~~ コマンドで、カラムに対して! 修飾子をつかうことで該当のカラムのNULLを禁止するマイグレーションファイルを生成できるようになりました
使い方は次のとおりです
code:USAGE
# Generating with...
bin/rails generate migration CreateUsers email_address:string!:uniq password_digest:string!
# Produces:
class CreateUsers < ActiveRecord::Migration8.0 def change
create_table :users do |t|
t.string :email_address, null: false
t.string :password_digest, null: false
t.timestamps
end
add_index :users, :email_address, unique: true
end
end